package cn.iocoder.yudao.module.erp.service.invoiceintegration;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.invoiceintegration.vo.InvoiceIntegrationPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.invoiceintegration.vo.InvoiceIntegrationRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.invoiceintegration.vo.InvoiceIntegrationSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.invoiceintegration.InvoiceIntegrationDO;
import jakarta.validation.Valid;

/**
 * 发票整合 Service 接口
 *
 * @author ls
 */
public interface InvoiceIntegrationService {

    /**
     * 创建发票整合
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createInvoiceIntegration(@Valid InvoiceIntegrationSaveReqVO createReqVO);

    /**
     * 更新发票整合
     *
     * @param updateReqVO 更新信息
     */
    void updateInvoiceIntegration(@Valid InvoiceIntegrationSaveReqVO updateReqVO);

    /**
     * 删除发票整合
     *
     * @param id 编号
     */
    void deleteInvoiceIntegration(String id);

    /**
     * 获得发票整合
     *
     * @param id 编号
     * @return 发票整合
     */
    InvoiceIntegrationDO getInvoiceIntegration(String id);

    /**
     * 获得发票整合分页
     *
     * @param pageReqVO 分页查询
     * @return 发票整合分页
     */
    PageResult<InvoiceIntegrationRespVO> getInvoiceIntegrationPage(InvoiceIntegrationPageReqVO pageReqVO);

    /**
     * 根据发票整合单编号 修改发票审核单状态
     *
     * @param checkInvoiceId 发票审核单编号
     * @param invoiceStatus 发票审核单状态
     */
    void updateStatusByCheckInvoiceId(String checkInvoiceId, String invoiceStatus,String taskId,String approvalOpinion);

    /**
     * 根据发票整合单编号 修改打款审核状态
     *
     * @param checkInvoiceId 发票审核单编号
     * @param payStatus 打款审核状态
     */
    void updatePayStatusByCheckInvoiceId(String checkInvoiceId, String payStatus,String taskId,String approvalOpinion);
    /**
     * 发起工作流
     *
     */
    void sendInvoiceIntegration(String id);
}